/**
 * 原型继承
 *      可以创建多个对象
 */

//  原型模式的对象复制方法
/**
 * 基于已经存在的模版对象克隆出新对象的模式
 * arguments[0], arguments[1], arguments[2] 表示模版对象
 * 这里对模版引用类型的属性实质上进行了浅拷贝（引用类型属性共享），可以根据需求进行深拷贝
 */
function prototypeExtend() {
    var F = function() {},  //缓存类，为实例化返回对象临时创建
        args = arguments,   //模版对象参数序列
        i = 0,
        len = args.length;
    for(; i < len; i++) {
        for (var j in args[i]) {
            F.prototype[j] = args[i][j];
        }
    }
    return new F();
}

var penguin = prototypeExtend({
    speed: 20,
    swim: function() {
        console.log('游泳速度 ' + this.speed);
    }
}, {
    run: function(speed) {
        console.log('奔跑速度 ' + speed);
    }
}, {
    jump: function() {
        console.log('跳跃动作');
    }
});

// 无需再用new去创建新的实例对象
penguin.swim();
penguin.run(10);
penguin.jump();
